package site.lianwu.mybatis.plus.query;

import site.lianwu.mybatis.plus.query.define.*;

import java.lang.annotation.*;

/**
 * 常规查询注解
 *
 * @author LianWu
 * @see site.lianwu.mybatis.plus.query.model.GeneralQueryField
 * @see site.lianwu.mybatis.plus.query.processor.GeneralQueryFieldProcessor
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Repeatable(QueryContainer.class)
public @interface Query {

    /**
     * 默认校验字段值不为空集合并且字符串不为空白
     * @return 验证类
     */
    Class<? extends Validation> validation() default Validator.NotEmptyAndNotBlank.class;

    /**
     * 默认根组，即查询条件中最外层的括号{@code WHERE (...)}
     * @return 分组（等价于SQL中的括号）
     */
    String group() default QueryConstants.ROOT_GROUP;

    /**
     * 默认（and），表示与分组内其他条件的逻辑连接关系
     * @return 逻辑操作符
     */
    Logic logic() default Logic.AND;

    /**
     * 默认为字段名驼峰转下划线
     * @return 列名
     */
    String column() default QueryConstants.HUMP_2_UNDER_LINE_FLAG;

    /**
     * 查询条件的比较方式，默认Eq（=）
     * @return 查询条件类
     */
    Class<? extends Condition> value() default ConditionType.Eq.class;

}
